/* 
* Authors: Stefan Bojarovski <bojarovski@gmail.com>
*		   Dmitry Lebedev <leeevd@gmail.com>
* June,	2011
*/

#pragma once

#include <boost/graph/adjacency_list.hpp>
#include <boost/unordered_map.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <boost/regex.hpp> 
#include <stdio.h>
#include <tchar.h>
#include <iostream> 
#include <fstream>
#include "performance_test.h"

#define BOOST_GRAPH_READ_GRAPHVIZ_ITERATORS

const int MAX_FILENAME_LENGTH = 256;
const std::string TEST_LOG = "test_log.txt";
const std::string OUTPUT_FILE = "output.dot";

// Type definitions
typedef boost::property <boost::vertex_name_t, std::string, boost::property <boost::vertex_color_t, int>> vertex_p;  
typedef boost::adjacency_list<boost::setS, boost::vecS, boost::undirectedS, vertex_p> Graph;

typedef boost::graph_traits<Graph>::edge_descriptor Edge;
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;

typedef std::vector<Vertex> VertexSet;
typedef std::vector<VertexSet*> ArrayList;

bool graph_read(Graph& g, std::string input);
void mark_vertex(Vertex v, Graph &g);
void graph_write(Graph& g, VertexSet& maxClique, const char* file_name);